Según MDN Web Docs Array.prototype#at , es un método válido. Pero por alguna razón, TypeScript se niega a compilar, afirmando que no existe.
public at(index: number): V { index = Math.floor(index); const arr = [...this.values()]; return arr.at(index); } No puedo usar la notación de corchetes, ya que el método está diseñado para poder manejar números negativos. Probé muchas cosas, incluida la configuración del target en el archivo tsconfig.json en ESNext, ES2021 y ES6, pero fue en vano. La opción lib tampoco ayuda.
json
// tsconfig.json { "compilerOptions": { "target": "ES2021", "outDir": "./dist", "declaration": true, "declarationDir": "./typings", "lib": ["ES2021", "ESNext"] } }¿Que puedo hacer? ¿Estoy haciendo algo mal?
Según MDN Web Docs
Array.prototype#at, es un método válido.
MDN no puede decidir qué es parte de TypeScript y qué no. Los desarrolladores de TypeScript hacen eso.
Si MDN dice o no que algo es un "método válido" es relevante para Mozilla, y solo para Mozilla, pero no tiene relación con TypeScript.
Pero por alguna razón, TypeScript se niega a compilar, afirmando que no existe.
Esto se debe a que el método no existe en ninguna versión de ECMAScript compatible con TypeScript.
Probé muchas cosas, incluida la configuración del
targeten el archivotsconfig.jsonen ESNext, ES2021 y ES6, pero fue en vano.
Esto se debe a que el método no existe ni en ECMAScript 6 ni en ECMAScript 2021 . Existe en ES2022 ( que es lo que es ESNext en este momento), pero solo se agregó hace ocho semanas y, por lo tanto, después de que se finalizó TypeScript 4.4 (y posiblemente también demasiado tarde para TypeScript 4.5).
La opción
libtampoco ayuda.
Nuevamente, eso se debe a que el método no existe en ninguna versión de biblioteca compatible con TypeScript en este momento.
Incluso en la rama principal actual, que se convertirá en TypeScript 4.6, lib/lib.esnext.d.ts solo corresponde a ECMAScript 2021 + las últimas extensiones de internacionalización .
¿Que puedo hacer? ¿Estoy haciendo algo mal?
Puede esperar hasta que el método realmente se convierta en parte de una versión lanzada de ECMAScript y/o TypeScript.
Array#at es de hecho un nuevo método disponible solo en ESNext o usando un polyfill. Si está utilizando este último, puede aumentar la interfaz de matriz global de esta manera:
declare global { interface Array<T> { at(index: number): T; } }